package dataProviders;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;


import entities.*;
import dataBase.*;

public class UsersDataProvider 
{	
	private static Pracownik zalogowanyPracownik;
	
	public static String getHaslo(String login)
	{		
		return DataBaseController.getPassword(login);	
	}
	public static Pracownik getUser(String login)
	{
		return DataBaseController.getUser(login);		
	}
	public static void setLoggedUser(Pracownik pr)
	{
		zalogowanyPracownik = pr;
	}
	public static Pracownik getLoggedUser()
	{
		return zalogowanyPracownik;
	}
	public static LinkedList<Pracownik> getListOfAllUsers()
	{
		LinkedList<Pracownik> tmpLista = new LinkedList<Pracownik>();
		try 
		{
			ResultSet wynik = DataBaseController.db.dbSqlQuery( "SELECT pracownicyID,telefon, email, ulica, numer, kodPocztowy, miasto, imie, nazwisko, pesel, nip, login, haslo, stanowisko, dataZatrudnienia, dataLogowania FROM Pracownicy" );
			while(wynik.next())
			{
				Pracownik tmpPrac = new Pracownik(wynik.getInt("pracownicyID"),wynik.getString("telefon"),wynik.getString("email"),wynik.getString("ulica"),wynik.getString("numer"),
						wynik.getString("kodPocztowy"),wynik.getString("miasto"),wynik.getString("imie"),wynik.getString("nazwisko"),wynik.getString("pesel"),wynik.getString("nip"),
						wynik.getString("login"),wynik.getString("haslo"),wynik.getString("stanowisko"),wynik.getDate("dataZatrudnienia"),wynik.getDate("dataLogowania"));
				tmpLista.add( tmpPrac );
			}
			return tmpLista;
		} 
		catch (SQLException e) {
			e.printStackTrace();
			return null;
		}
	}
	public static void delUser(String login)
	{
		String sql = "DELETE FROM Pracownicy WHERE login='"+login+"' ";
		//System.out.println(sql);
		try 
		{
			DataBaseController.db.dbSqlUpdate(sql);
			DataBaseController.db.dbCommit();
		}
		catch (SQLException e) 
		{
			e.printStackTrace();
		}
	}
	public static void modifyAccount(Pracownik p)
	{
		String sql = "UPDATE Pracownicy SET " + 
				"telefon='"+p.getTelefon()+ 
				"', email='"+p.getEmail()+ 
				"', ulica='"+p.getUlica()+ 
				"', numer='"+p.getNumerUlicy()+
				"', kodPocztowy='"+p.getKodPocztowy()+ 
				"', miasto='"+p.getMiasto()+ 
				"', imie='"+p.getImie()+ 
				"', nazwisko='"+p.getNazwisko()+ 
				"', pesel='"+p.getPesel()+ 
				"', nip='"+p.getNip()+
				"', login='"+p.getLogin()+
				"', haslo='"+p.getHaslo()+
				"', stanowisko='"+p.getStanowisko()+
				"', dataZatrudnienia='"+p.getDataZatrudnienia()+
				"', dataLogowania='"+p.getDataLogowania()+				
				"' WHERE pracownicyID='"+p.getId()+"' ";
		try 
		{
			DataBaseController.db.dbSqlUpdate(sql);
			DataBaseController.db.dbCommit();
		}
		catch (SQLException e) 
		{
			e.printStackTrace();
		}
	}
	private static int lastUserId()
	{
		int ostatnieId = -1;
		try 
		{
			String sql ="SELECT MAX(pracownicyID) FROM Pracownicy";
			ResultSet wynik = DataBaseController.db.dbSqlQuery( sql);
			while( wynik.next() )
			{
				ostatnieId = wynik.getInt(1);				
			}
			return ostatnieId;
		} 
		catch(SQLException e) 
		{
			e.printStackTrace();
			return ostatnieId;
		}
	}
	public static void addAccount(Pracownik p)
	{
		int newID = lastUserId() + 1;

		String sql = "INSERT INTO Pracownicy (telefon, email, ulica, numer, kodPocztowy, miasto, imie, nazwisko, pesel, pracownicyID, nip, login, haslo, stanowisko, dataZatrudnienia, dataLogowania) " +
		"VALUES( '"+p.getTelefon()+"','"+p.getEmail()+"','"+p.getUlica()+"','"+p.getNumerUlicy()+"','"+p.getKodPocztowy()+"','"+p.getMiasto()+"','"+p.getImie()+"','"+p.getNazwisko()+"','"+p.getPesel()+"','"+newID+"','"+p.getNip()+"','"+p.getLogin()+"','"+p.getHaslo()+"','"+p.getStanowisko()+"','"+p.getDataZatrudnienia()+"','"+p.getDataLogowania() +"')";
		
		System.out.println(p.getStanowisko());
		try 
		{
			DataBaseController.db.dbSqlUpdate(sql);
			DataBaseController.db.dbCommit();
		}
		catch (SQLException e) 
		{
			e.printStackTrace();
		}
	}
}
